//  /*******************************************************************************
//  * Author      :  ChuanQin Yu                                                   *
//  * Copyright   :  (c) ChuanQin Yu 2023-2024                                     *
//  * mail        :  ycq1014@gmail.com                                             *
//  * License     :  http://www.boost.org/LICENSE_1_0.txt                          *
//  ********************************************************************************

#ifndef TITLEBAR_H
#define TITLEBAR_H

#include <QtWidgets>
#include <QLabel>
#include <QPushButton>
#include <QHBoxLayout>
#include <QSpacerItem>
#include <QToolButton>

class TitleBar : public QWidget
{
    Q_OBJECT

public:
    explicit TitleBar(QWidget *parent = nullptr);
    ~TitleBar();

private:
    // 标题栏
    QString windowTitle {};             // 窗口标题
    // 图标
    QLabel *iconLabel;                  // 图标
    QLabel *titleLabel;                 // 标题

    // 按钮
    QToolButton *minimizeButton;        // 最小化按钮
    QToolButton *maximizeButton;        // 最大化按钮
    QToolButton *closeButton;           // 关闭按钮
    QToolButton *styleButton;           // 样式按钮
    QToolButton *fixedButton;           // 固定按钮

    // 布局
    QHBoxLayout *layoutBtn;             // 按钮布局
    QHBoxLayout *layoutLabel;           // 标签布局
    QHBoxLayout *layout;                // 整体布局

    // 固定值
    const int btnLabelWidth = 5;        // 按钮和标签 各自之间的间距
    const int iconSize = 25;            // 图标大小
    const QSize LabelBtnSize = QSize(30, 30);  // 标签大小

    // isMaximized用于判断当前窗口是否最大化
    bool isMaximized = false;           // 是否最大化
    bool isPressed = false;             // 是否按下
    bool isFixed = false;               // 是否固定

    // 鼠标按下的位置
    QPoint m_startPoint;                // 鼠标按下的位置
    QPoint m_windowPoint;               // 窗口的位置
    int last_width {1000};

    // 父窗口
    QWidget *parentWidget;

protected:
    void changeEvent(QEvent *event) override;
    void mousePressEvent(QMouseEvent *event) override;
    void mouseMoveEvent(QMouseEvent *event) override;
    void mouseReleaseEvent(QMouseEvent *event) override;
    void mouseDoubleClickEvent(QMouseEvent *event) override;

private:
    void init();
    void initLabel();
    void initButton();

public:
    void setTitle(const QString &title);
    void setIcon(const QIcon &icon);
    void setIcon(const QString &iconFile);

public slots:
    void minimizeClicked();             // 最小化按钮点击
    void maximizeClicked();             // 最大化和窗口化按钮点击
    void closeWindowClicked();          // 关闭按钮点击
    void fixedWindowClicked();          // 固定按钮点击

signals:
    void minimizeWindow();              // 最小化窗口 信号
    void restoreWindow();               // 还原窗口 信号
    void maximizeWindow();              // 最大化窗口 信号
    void closeWindow();                 // 关闭窗口 信号
    void fixedWindow();                 // 固定窗口 信号
    void unFixedWindow();               // 取消固定窗口 信号


};

#endif  // TITLEBAR_H
